// /*
//  * Copyright (c) 2011-2021, baomidou (jobob@qq.com).
//  *
//  * Licensed under the Apache License, Version 2.0 (the "License");
//  * you may not use this file except in compliance with the License.
//  * You may obtain a copy of the License at
//  *
//  *     http://www.apache.org/licenses/LICENSE-2.0
//  *
//  * Unless required by applicable law or agreed to in writing, software
//  * distributed under the License is distributed on an "AS IS" BASIS,
//  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
//  * See the License for the specific language governing permissions and
//  * limitations under the License.
//  */
// package com.cfushn.ddd.mp.wrapper.query;
//
// import com.baomidou.mybatisplus.core.conditions.SharedString;
// import com.baomidou.mybatisplus.core.conditions.query.Query;
// import com.baomidou.mybatisplus.core.conditions.segments.MergeSegments;
// import com.baomidou.mybatisplus.core.toolkit.ArrayUtils;
// import com.baomidou.mybatisplus.core.toolkit.StringPool;
// import com.baomidou.mybatisplus.core.toolkit.StringUtils;
// import com.cfushn.ddd.mp.wrapper.AbstractWrapper;
// import java.util.Map;
// import java.util.concurrent.atomic.AtomicInteger;
//
// /**
//  * Entity 对象封装操作类
//  *
//  * @author hubin miemie HCL
//  * @since 2018-05-25
//  */
// @SuppressWarnings("serial")
// public class QueryWrapper extends AbstractWrapper<String, QueryWrapper>
//     implements Query<QueryWrapper, String> {
//
//     /**
//      * 查询字段
//      */
//     private final SharedString sqlSelect = new SharedString();
//
//     public QueryWrapper() {
//         super.initNeed();
//     }
//
//     public QueryWrapper(String... columns) {
//         super.initNeed();
//         this.select(columns);
//     }
//
//     /**
//      * 非对外公开的构造方法,只用于生产嵌套 sql
//      */
//     private QueryWrapper(AtomicInteger paramNameSeq,
//         Map<String, Object> paramNameValuePairs, MergeSegments mergeSegments,
//         SharedString paramAlias,
//         SharedString lastSql, SharedString sqlComment, SharedString sqlFirst) {
//         this.paramNameSeq = paramNameSeq;
//         this.paramNameValuePairs = paramNameValuePairs;
//         this.expression = mergeSegments;
//         this.paramAlias = paramAlias;
//         this.lastSql = lastSql;
//         this.sqlComment = sqlComment;
//         this.sqlFirst = sqlFirst;
//     }
//
//     public QueryWrapper select(String... columns) {
//         if (ArrayUtils.isNotEmpty(columns)) {
//             this.sqlSelect.setStringValue(String.join(StringPool.COMMA, columns));
//         }
//         return typedThis;
//     }
//
//     @Override
//     public String getSqlSelect() {
//         return sqlSelect.getStringValue();
//     }
//
//     @Override
//     protected String columnSqlInjectFilter(String column) {
//         return StringUtils.sqlInjectionReplaceBlank(column);
//     }
//
//     /**
//      * 返回一个支持 lambda 函数写法的 wrapper
//      */
//     public LambdaQueryWrapper lambda() {
//         return new LambdaQueryWrapper(sqlSelect, paramNameSeq, paramNameValuePairs,
//             expression, paramAlias, lastSql, sqlComment, sqlFirst);
//     }
//
//     /**
//      * 用于生成嵌套 sql
//      * <p>
//      * 故 sqlSelect 不向下传递
//      * </p>
//      */
//     @Override
//     protected QueryWrapper instance() {
//         return new QueryWrapper(paramNameSeq, paramNameValuePairs, new MergeSegments(),
//             paramAlias, SharedString.emptyString(), SharedString.emptyString(),
//             SharedString.emptyString());
//     }
//
//     @Override
//     public void clear() {
//         super.clear();
//         sqlSelect.toNull();
//     }
// }
